#include<bits/stdc++.h>
#include "graph.h"
using namespace std;
const int P=205;
int n,a[P][P],b[P][P],tot=1,p[P],L,Cnt[P],ans[P],dis[P];
bool flag[P][P];
vector<int>v;
void dfs(int x,int prt)
{
	p[x]=prt;
	int cnt=NumberOfRoads(),t=LastRoad();
	Cnt[x]=cnt;
	if(t!=-1)a[x][t]=prt,b[x][prt]=t;
	for(int i=1;i<=cnt;i++)if(i!=t)
	{
		Move(i,2);
		int T=LastRoad();
		if(Color()==1)tot++,a[x][i]=tot,b[x][tot]=i,flag[x][i]=1,dfs(tot,x);
		Move(T,2);
	}
}
void dfs2(int x,int rt)
{
	int cnt=NumberOfRoads();
	if(Color()==1)
	{
		while(a[rt][L])L++;
		a[rt][L]=x,b[rt][x]=L;
	}
	for(int i=1;i<=cnt;i++)if(flag[x][i])
	{
		Move(i,2);
		int T=LastRoad();
		dfs2(a[x][i],rt),Move(T,2);
	}
}
void Get(int x)
{
	int X=x;
	v.clear();
	while(x)v.emplace_back(x),x=p[x];
	reverse(v.begin(),v.end());
	for(int i=0;i<v.size()-1;i++)Move(b[v[i]][v[i+1]],2);
	int cnt=NumberOfRoads();
	for(int i=1;i<=cnt;i++)if(!a[X][i])Move(i,2),Move(LastRoad(),1);
	for(int i=v.size()-1;i>0;i--)
	{
		int tt=Color();
		Move(b[v[i]][v[i-1]],tt);
	}
	L=1,dfs2(1,X);
}
void bfs(int x)
{
	queue<int>q;
	memset(dis,-1,sizeof(dis)),dis[x]=0,q.emplace(x);
	while(!q.empty())
	{
		int x=q.front();q.pop(),ans[dis[x]]++;
		for(int i=1;i<=Cnt[x];i++)if(dis[a[x][i]]==-1)
		{
			dis[a[x][i]]=dis[x]+1,q.emplace(a[x][i]);
		}
	}
}
void Inspect(int R)
{
	dfs(1,0);
	for(int i=1;i<=tot;i++)Get(i);
	for(int i=1;i<=tot;i++)bfs(i);
	for(int i=1;i<=R;i++)Answer(i,ans[i]/2);
}
